#include "../inc/label.h"

// Label 构造函数，初始化标签
Label::Label(UI_Object* parent)
{
  // 设置父对象
  this->parent = parent;

  // 创建一个 LVGL 标签对象，并将其父对象设置为传入的 parent
  this->this_object = lv_label_create(parent->get_lv_obj_t());
}

// Label 析构函数
Label::~Label()
{
  // 以下代码被注释掉，可以用于在析构时检查并删除 LVGL 对象
  // if (lv_obj_is_valid(this_object))
  // {
  //   printf("UI_Object destructor: lv_obj_is_valid(this_object)\n");
  //   lv_obj_del(this_object);
  // }
}

// 设置标签的文本内容和颜色
void Label::set_text(const char* text, uint32_t color)
{
  // 设置标签的文本内容，并支持颜色格式化
  lv_label_set_text_fmt(this_object, "#%x %s#", color, text);

  // static lv_style_t font_style;
  // lv_style_init(&font_style);
  // lv_style_set_text_font(&font_style, &lv_font_montserrat_28);
  // lv_obj_add_style(this_object, &font_style, 0);
  // lv_label_

  // 启用标签的重新着色功能，以支持文本中的颜色代码
  lv_label_set_recolor(this_object, true);
}

// 设置标签的字体
void Label::set_font(const lv_font_t* font)
{
  // 初始化字体样式
  lv_style_init(&font_style);

  // 设置字体样式的字体
  lv_style_set_text_font(&font_style, font);

  // 将字体样式应用到标签
  lv_obj_add_style(this_object, &font_style, 0);
}

// 设置标签的位置
void Label::set_pos(lv_coord_t x, lv_coord_t y)
{
  // 设置标签的位置
  lv_obj_set_pos(this_object, x, y);
}

// 获取 LVGL 对象指针
lv_obj_t* Label::get_lv_obj_t()
{
  return this_object;  // 返回 LVGL 对象指针
}